/***********************************************
 @Name :        小铭同学
 @Time :        2025-08-15
 @Email :       LiaoMingWJ233@163.com
 @Comment :     自定义控件 天气预报信息类 解JSON
 @FileName :    weather_json.cpp
 @Version :     1.0
************************************************/


#include "weather_json.h"

// 构造函数，初始化成员变量
weather_JSON::weather_JSON(QObject *parent) : QObject(parent),
    m_pm25(0), m_pm10(0)  // 初始化PM2.5和PM10为0
{
    
}

// 从JSON字符串加载并解析天气数据
bool weather_JSON::loadFromJson(const QString &json)
{
    QJsonParseError error;
    // 将JSON字符串转换为QJsonDocument
    QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8(), &error);

    // 检查JSON解析是否出错或不是对象
    if (error.error != QJsonParseError::NoError || !doc.isObject())
        return false;

    // 获取根对象
    QJsonObject root = doc.object();

    // 解析城市信息
    QJsonObject cityInfo = root["cityInfo"].toObject();
    m_city = cityInfo["city"].toString();          // 城市名称
    m_updateTime = cityInfo["updateTime"].toString(); // 数据更新时间

    // 获取日期
    m_date = root["date"].toString();

    // 解析主要天气数据
    QJsonObject data = root["data"].toObject();
    m_shidu = data["shidu"].toString();    // 湿度
    m_wendu = data["wendu"].toString();    // 温度
    m_pm25 = data["pm25"].toDouble();      // PM2.5值
    m_pm10 = data["pm10"].toDouble();      // PM10值
    m_quality = data["quality"].toString(); // 空气质量
    m_ganmao = data["ganmao"].toString();  // 感冒提示

    // 解析未来7天天气预报
    m_forecast.clear();  // 清空原有预报数据
    QJsonArray forecastArray = data["forecast"].toArray();
    for (int i = 0; i < 7 && i < forecastArray.size(); ++i)
    {
        QJsonObject obj = forecastArray[i].toObject();
        Forecast f;
        f.high = obj["high"].toString();       // 最高温度
        f.low = obj["low"].toString();         // 最低温度
        f.ymd = obj["ymd"].toString();         // 年月日
        f.week = obj["week"].toString();       // 星期几
        f.sunrise = obj["sunrise"].toString(); // 日出时间
        f.sunset = obj["sunset"].toString();   // 日落时间
        f.aqi = obj["aqi"].toInt();            // 空气质量指数
        f.fx = obj["fx"].toString();           // 风向
        f.fl = obj["fl"].toString();           // 风力
        f.type = obj["type"].toString();       // 天气类型
        f.notice = obj["notice"].toString();   // 天气提示
        m_forecast.append(f);  // 添加到预报列表
    }

    return true;  // 解析成功
}

// 以下是各个成员变量的Getter方法实现

// 获取城市名称
QString weather_JSON::city() const
{
    return m_city;
}

// 获取日期
QString weather_JSON::date() const
{
    return m_date;
}

// 获取更新时间
QString weather_JSON::updateTime() const
{
    return m_updateTime;
}

// 获取湿度
QString weather_JSON::shidu() const
{
    return m_shidu;
}

// 获取温度
QString weather_JSON::wendu() const
{
    return m_wendu;
}

// 获取PM2.5值
double weather_JSON::pm25() const
{
    return m_pm25;
}

// 获取PM10值
double weather_JSON::pm10() const
{
    return m_pm10;
}

// 获取空气质量
QString weather_JSON::quality() const
{
    return m_quality;
}

// 获取感冒提示
QString weather_JSON::ganmao() const
{
    return m_ganmao;
}

// 获取未来7天天气预报列表
QList<Forecast> weather_JSON::forecastList() const
{
    return m_forecast;
}
